MySQL IF THEN 在 WHERE 子句中
全部标签 我正在编写这个复杂的查询以返回一个大型数据集,大约有100,000条记录。在我将此OR语句添加到WHERE子句之前,查询运行良好:AND(responses.StrategyFk=strategies.IdOrresponses.StrategyFkISNull)现在我明白了,将or语句放在那里会增加很多开销。没有那个声明,只是:ANDresponses.StrategyFk=strategies.Id查询在15秒内运行,但不会返回任何没有fk链接策略的记录。虽然我也想要这些唱片。有没有更简单的方法可以通过简单的where语句找到这两条记录?我不能只为空记录添加另一个AND语句,因为那
SELECTidFROMmytableWHERElogin='Jhon'ANDpassword='123'login列有唯一索引,password没有索引。找到第一个结果后,mysql会不会停止执行? 最佳答案 SELECTidFROMmytableWHERElogin='Jhon'ANDpassword='123'没关系,因为您是在UNIQUECONSTRAINT/INDEX上过滤,所以不需要限制。顺便说一句,不要在数据库中存储纯文本密码。如果login是唯一索引,查询将在找到“Jhon”后停止搜索索引b-tree。因为您有登录名
给定一个表格idxy--------5200153000252243613516222226163我可以用得到所有y=1的x值SELECTxasy1WHEREy=1我可以用得到y=2的所有x值SELECTxasy2WHEREy=2但我想在一个查询中选择这些,这样我会得到类似的结果idy1y2--------5200300061352222这可以在一个查询中完成吗?我已经尝试了几乎所有我能想到的变体,但都是错误。 最佳答案 MySQL没有像SQLServer一样的PIVOT函数。但是您仍然可以使用MAX()和CASE()来模拟它,以连
我在MYSQL中有以下非常简单的左外连接:select*fromemployeeleftjoindepartment但是,这给了我毫无意义的错误信息ErrorCode:1064.YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear''atline1但如果我简单地添加一个ON子句,如下所示,查询有效:select*fromemployeeleftjoindepartmentonemployee.departmentId=de
此SQL查询的结果应返回一组6行。SELECTbaseFeeds.siteURL,feedFinishes.timeTaken,feedFinishes.timeSubmittedFROMfeedFinishesLEFTOUTERJOINbaseFeedsONfeedFinishes.GUID=baseFeeds.GUIDWHEREfeedFinishes.nowDate=baseFeeds.nowDateANDbaseFeeds.siteURLLIKE'%www.example.com%'目前它返回18行,正确的6行被重复3次。我认为解决这个问题的方法是使用另一个类似于以下内容的WH
在5Gb大小的消息表上运行此查询。问题是执行时间>3分钟。SELECTm.idFROMmessagesmLEFTJOINdialogdonm.id=d.midWHERE(SELECTcount(*)FROMdialogWHERE(m.from_id=uid1andm.user_id=uid2)OR(m.from_id=uid2andm.user_id=uid1))=0&&read_state=0LIMIT100我明白,通过NESTEDSELECTINWHERECLAUSE搜索是一种不好的做法,但还没有找到另一种选择此类行的方法。尝试将OR拆分为2个UNION语句,但它也很长。消息表结构
如果我执行以下查询,它工作正常。SELECTCASEWHENdescriptionLIKE'%a%'THEN'A'WHENdescriptionLIKE'%b%'THEN'B'ELSE'C'ENDASfoo,COUNT(*)AScntFROMproductpGROUPBYfooORDERBYfoo;结果是这样的foo|cnt-----------A|809B|29C|55但是,下面的查询给出了一个错误。请注意,我只更改了最后一行。SELECTCASEWHENdescriptionLIKE'%a%'THEN'A'WHENdescriptionLIKE'%b%'THEN'B'ELSE'C'
假设您有一个包含以下列的表:iddatecol1我希望能够使用特定的ID和日期查询此表,并按另一列排序。例如,SELECT*FROMTABLEWHEREid=?ANDdate>?ORDERBYcol1DESC根据thisrange文档,索引在遇到>运算符后将停止使用。但是根据this按文档排序,如果索引按索引中的最后一列排序,则索引只能用于优化orderby子句。是否可以对该查询的每个部分进行索引查找,或者您只能获得3个中的2个?我能做得比index(id,date)更好吗? 最佳答案 计划A:INDEX(id,date)--如果它
请给出在HQL中使用CASEWHEN的例子。我在我的代码中使用了以下查询。intreceiptNumber=100;Stringhql="SELECTbFROMOOPExtractasb"+"WHERE"+"b.tranStatId="+receiptNumber+"AND"+"b.orderTypeIN('EMERGENCY','PLENARY','PETITION','EXTENSION','MOTION')AND"+"CASEWHENb.orderType=='MOTION'"`entercodehere`+"THEN"+"b.status='MOTION_SIGNED'"+"E
我有一个不工作的查询$lokesh="select*fromlicense_infowheremac_id='$mac_id'andadmin_user_name='$admin'";在上面的查询中,我选择了匹配macid和admin_user_name的记录但是当我回显这个sql查询时,它显示的输出如下select*fromlicense_infowheremac_id='0800279020F2'andadmin_user_name='sanjay'最后的单引号打印在下面一行,所以我无法检索记录。下行打印单引号是什么原因 最佳答案